<?php
/**
 * Created by PhpStorm.
 * User: Kau
 * Date: 2018/3/23
 * Time: 2:52
 */
namespace app\index\controller;

use think\Controller;
use think\Exception;

// TODO:only code ，no test
abstract class Weixinpay extends Controller
{
    public function notify()
    {
        $weixinData = file_get_contents("php://input");
        file_put_contents('/tmp/2.txt', $weixinData, FILE_APPEND);
        try
        {
            $resultObj = new \WxPayResults();
            $weixinData = $resultObj->Init($weixinData);
        }catch (Exception $e)
        {
            $resultObj->setData('return_code', 'FAIL');
            $resultObj->setData('return_msg', $e->getMessage());
            return $resultObj->toXml();
        }
        if ($weixinData['return_code'] === 'FAIL' || $weixinData['return_code'] !== 'SUCCESS')
        {
            $resultObj->setData('return_code', 'FAIL');
            $resultObj->setData('return_msg', 'error');
            return $resultObj->toXml();
        }

        // 根据out_trade_no来查询订单数据
        $outTradeNo = $weixinData['out_trade_no'];
        $order = model('Order')->get(['out_trade_no' => $outTradeNo]);
        if (!$order || $order['pay_status'] == 1)
        {
            $resultObj->setData('return_code', 'SUCCESS');
            $resultObj->setData('return_msg', 'OK');
            return $resultObj->toXml();
        }
        // 更新表数据
        try
        {
            $orderRes = model('Order')->updateOrderByOutTradeNo($outTradeNo, $weixinData);
            model('Deal')->updateBuyCountById($order['deal_id'], $order['deal_count']);

            // 消费券生成
            $coupons = [
                'sn' => $outTradeNo,
                'password' => rand(10000, 99999),
                'user_id' => $order['user_id'],
                'deal_id' => $order['deal_id'],
                'order_id' => $order['id'],
            ];
            model('Coupons')->add($coupons);
            // TODO:发送邮件给用户 不要在这里写 使用异步消息队列处理减轻服务器压力
        }catch (Exception $e)
        {
            // 说明 没有更新 告诉微信 服务器还需要回调
            return false;
        }
        $resultObj->setData('return_code', 'SUCCESS');
        $resultObj->setData('return_msg', 'OK');
        return $resultObj->toXml();
    }

    public function wxpayQCode($id)
    {
        // 微信支付 - 统一下单
        $input = new \WxPayUnifiedOrder();
        $input->SetBody('test');
        $input->SetAttach('test');
        $input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis")); //设置订单编号
        $input->SetTotal_fee("1");//支付金额
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
        $input->SetGoods_tag("test");
        $notify_url = $http."/index.php/index/weixinpay/notify";
        $input->SetNotify_url($notify_url );//设置回调
        $input->SetTrade_type("NATIVE");
        $input->SetProduct_id($id);//设置产品ID编号
        $result = $notify->GetPayUrl($input);
        if (empty($result["code_url"])) {
            $url = '';
        } else {
            $url = $result["code_url"];
        }
        return '<img alt="扫码支付" src="/weixin/example/qrcode.php?data='.urlencode($url).'" style="width: 300px; height: 300px;"></img>';
    }
}